﻿namespace Skying.Net.Sockets
{
	/// <summary>
	/// 접속한 클라이언트의 유형을 나타내는 열거형을 정의한다.
	/// </summary>
	/// <remarks>
	/// <para>이 열거형은 <see cref="Skying.Net.Sockets.TcpListener"/> 개체로 접속한 클라이언트가 <see cref="Skying.Net.Socket.TcpClient"/> 개체 혹은 <see cref="Skying.Net.Socket.BaseSocket"/>을 상속하여 구현한 클래스의 개체가 아닌 경우를 위해 존재한다.</para>
	/// <para><see cref="Skying.Net.Socket.TcpListener"/>가 내부 헤더를 사용하지 않을 경우, 이 열거형을 통해 클라이언트를 구분할 수도 있다.</para>
	/// </remarks>
	public enum ClientType : byte
	{
		/// <summary>
		/// 클라이언트가 아님을 나타낸다.
		/// </summary>
		None = 0x00,

		/// <summary>
		/// <para>알 수 없는 클라이언트를 나타낸다.</para>
		/// <para>이런 경우 <see cref="Skying.Net.Socket.TcpClient"/> 개체 혹은 <see cref="Skying.Net.Socket.BaseSocket"/>로 구현된 클래스의 개체를 사용하지 않거나 내부 헤더를 사용하지 않는 경우를 나타낸다.</para>
		/// </summary>
		Unknown = 0x01,

		/// <summary>
		/// <para><see cref="Skying.Net.Socket.TcpClient"/> 개체 혹은 <see cref="Skying.Net.Socket.BaseSocket"/>로 구현된 클래스의 개체를 이용해 접속한 클라이언트를 나타낸다.</para>
		/// </summary>
		Managed = 0x02,

		/// <summary>
		/// <para><see cref="Skying.Net.Socket.TcpClient"/> 개체 혹은 <see cref="Skying.Net.Socket.BaseSocket"/>로 구현된 클래스의 개체를 이용하나 내부 헤더를 사용하지 않는 경우를 나타낸다.</para>
		/// </summary>
		Unmanaged = 0x04,

		/// <summary>
		/// HTTP 클라이언트가 접속한 경우를 나타낸다.
		/// </summary>
		HTTP = 0x08,
	}
}